package org.mytools.dao.gener.meta;

import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import java.util.List;

/**
 * 数据库元数据接口
 * 
 * @author Jacky.L
 * 
 */
public interface MetaData {

	public static final String TABLE = "TABLE";
	public static final String SELECT_TABLE = "SELECT * FROM ";
	public static final String WHERE = " WHERE 1=2";

	/**
	 * 返回数据库表名List列表
	 * 
	 * @return 数据库表名List列表
	 * @throws SQLException
	 */
	public List<String> getTableNames() throws SQLException;

	/**
	 * 返回以指定前缀开始的数据库表名List列表
	 * 
	 * @param start
	 *            指定前缀
	 * @return 数据库表名List列表
	 * @throws SQLException
	 */
	public List<String> getTableNames(String start) throws SQLException;

	/**
	 * 返回数据库表的列list列表
	 * 
	 * @param rsmd
	 *            结果集元数据
	 * @param tableName
	 *            表的名称
	 * @return 数据库表的列list列表
	 * @throws SQLException
	 */
	public List<ColumnData> getColumns(ResultSetMetaData rsmd, String tableName)
			throws SQLException;

	/**
	 * 返回数据库表的列list列表
	 * 
	 * @param tableName
	 *            表的名称
	 * @return 数据库表的列list列表
	 * @throws SQLException
	 */
	public List<ColumnData> getColumns(String tableName) throws SQLException;

	/**
	 * 返回数据库表的主键list列表
	 * 
	 * @param tableName
	 *            表的名称
	 * @return 数据库表的主键list列表
	 * @throws SQLException
	 */
	public List<String> getPKs(String tableName) throws SQLException;

	/**
	 * 判断指定表的某列是否是主键
	 * 
	 * @param tableName
	 *            表的名称
	 * @param columnName
	 *            列的名称
	 * @return 是主键返回true，否则返回false
	 * @throws SQLException
	 */
	public boolean isPrimaryKey(String tableName, String columnName)
			throws SQLException;

	/**
	 * 返回指定表的外键list列表
	 * 
	 * @return 表的外键list列表
	 * @throws SQLException
	 */
	public List<ForeginKeys> getForeginKeys(String tableName)
			throws SQLException;

	/**
	 * 返回数据库类型，这里指数据库的名字
	 * 
	 * @return 数据库的名字
	 */
	public String getDBName();

}
